package servlets;

import excecoes.AutenticacaoException;
import excecoes.ParametrosInvalidosException;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import negocio.Conta;
import negocio.Operacao;

@WebServlet(value="/autenticar")
public class AutenticarSevlet extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            int conta = Integer.parseInt(request.getParameter("conta"));
            String senha = request.getParameter("senha");
            if (senha.equals("")) senha = null;

            if (senha != null) {
                ServletContext context = getServletContext();
                HttpSession session = request.getSession();

                ArrayList<Conta> contas = (ArrayList<Conta>) context.getAttribute("contas");
                if (contas == null) {
                    //Popular BD de contas!
                    contas = new ArrayList<Conta>();
                    contas.add(new Conta(1, "1234", 0));
                    contas.add(new Conta(2, "5678", 0));
                    contas.add(new Conta(3, "9999", 0));
                    context.setAttribute("contas", contas);
                }

                ArrayList<Operacao> operacoes = (ArrayList<Operacao>) context.getAttribute("operacoes");
                if (operacoes == null) {
                    operacoes = new ArrayList<Operacao>();
                    context.setAttribute("operacoes", operacoes);
                }
                
                for (Conta c : contas) {
                    if (c.getNumero() == conta && c.getSenha().equals(senha)) {
                        session.setAttribute("conta", c);
                        
                        response.sendRedirect("menu.html");
                        return;
                    }
                }
                
                session.setAttribute("conta", null);
                throw new AutenticacaoException("A conta-corrente ou a senha informada não existem!");
            } else {
                throw new ParametrosInvalidosException("Parâmetros de autenticação inválidos!");
            }
        } catch(NumberFormatException e) {
            throw new ParametrosInvalidosException("Parâmetros de autenticação inválidos!");
        }
    }
    
}